package cn.nn200433.mqtt.config;

import cn.nn200433.mqtt.constants.MqttConstants;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * mqtt配置
 *
 * @author nn200433
 * @date 2021-07-23 03:39:49
 */
@Setter
@Getter
@ConfigurationProperties(prefix = MqttClientProperties.MQTT_CONFIG_PREFIX)
public class MqttClientProperties {

    public static final String MQTT_CONFIG_PREFIX = "mqtt.client";

    /**
     * enabled                                   : 是否自动启动 mqtt 客户端
     * ip                                        : mqtt 服务端（broker）ip地址
     * port                                      : mqtt 服务端（broker）端口号
     * clientId                                  : mqtt 终端id（一般采用前缀+时间戳构成，反之重复）
     * userName                                  : mqtt 身份鉴权 登录用户名
     * password                                  : mqtt 身份鉴权 登录密码
     * cleanSession                              : mqtt 清除会话（默认 true），qos1/qos2 需要设置为 false
     * connectionTimeout                         : mqtt 连接超时时长（默认 10）
     * keepAliveInterval                         : mqtt 客户端连接保活时长（默认 60）
     * automaticReconnect                        : mqtt 客户端自动重连（默认 true）
     * autoSubscribeDefault                      : mqtt 客户端是否订阅默认主题（默认 false）
     * subTopics                                 : mqtt 客户端订阅主题，多个用 “,” 隔开
     * subTopicQos                               : QoS level 0 至多一次
     *                                             QoS level 1 至少一次
     *                                             QoS level 2 仅一次
     * mqttCallbackClass                         : mqtt 回调方法（一般不用动）
     */
    private Boolean enabled                       = Boolean.TRUE;
    private String  ip                            = "127.0.0.1";
    private Integer port                          = 1883;
    private String  clientId                      = "mqtt_demo";
    private String  userName                      = "demo";
    private String  password                      = "demo.123";
    private Boolean cleanSession                  = Boolean.TRUE;
    private Integer connectionTimeout             = 10;
    private Integer keepAliveInterval             = 60;
    private Boolean automaticReconnect            = Boolean.TRUE;
    private Boolean autoSubscribeDefault          = Boolean.FALSE;
    private String  subTopics                     = "sub";
    private Integer subTopicQos                   = MqttConstants.QOS_0;
    private String  mqttCallbackClass             = "cn.nn200433.mqtt.service.impl.DefaultMqttCallbackServiceImpl";

}